// components/countDown.js
const Day = 86400000;//天/毫秒
const Hour = 3600000; //小时/毫秒
const Min = 60000; //分钟/毫秒

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    timeStamp: {
      type: Number,
      value: '',
      observer(newVal, oldVal, changedPath) {
        // 属性被改变时执行的函数（可选），也可以写成在methods段中定义的方法名字符串, 如：'_propertyChange'
        // 通常 newVal 就是新设置的数据， oldVal 是旧数据
        // console.log(newVal, oldVal, changedPath);
        this.countDown(newVal);
      }

    },
    showHm: {//是否展示毫秒
      type: Boolean,
      value: false
    },
    format: {//是否格式化
      type: Boolean,
      value: false
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    d: '', //天
    h: '00', //时分秒
    m: '00',
    s: '00',
    hm: '0', //毫秒
  },

  /**
   * 组件的方法列表
   */
  methods: {
    countDown: function (newVal) {
      if (this.data.showHm) {
        this.countDownWithHm(newVal);
      } else {
        this.countDownWithSec(newVal);
      }
    },
    getSurplusTime: function (time) {
      let nowDate = new Date(); //当前时间
      let nowTime = nowDate.getTime(); //当前时间毫秒数
      let surplusTime = time - nowTime; //剩余毫秒数
      let showHm = this.data.showHm;//是否显示毫秒
      let [d, h, m, s, hm] = [0, '00', '00', '00', '0']; //天时分毫秒
      if (surplusTime > 0) {
        d = parseInt(surplusTime / Day); //总毫秒除以一天的毫秒 得到相差的天数  
        h = parseInt(surplusTime / Hour - (24 * d)); //然后取完天数之后的余下的毫秒数再除以每小时的毫秒数得到小时 
        m = parseInt(surplusTime / Min - (24 * 60 * d) - (60 * h)); //减去天数和小时数的毫秒数剩下的毫秒，再除以每分钟的毫秒数，得到分钟数 
        s = parseInt(surplusTime / 1000 - (24 * 60 * 60 * d) - (60 * 60 * h) - (60 * m)); //得到最后剩下的毫秒数除以1000 就是秒数，再剩下的毫秒自动忽略即可
        if (showHm) hm = Math.floor((surplusTime - (24 * 60 * 60 * 1000 * d) - (60 * 60 * 1000 * h) - (60 * 1000 * m) - (s * 1000)) / 100);

        if (surplusTime > 86400 ){//大于一天则按天显示
          this.triggerEvent('changeFormat',true);
        }else{
          this.triggerEvent('changeFormat',false);
        }
        if (s < 10) {
          s = "0" + s;
        }
        if (m < 10) {
          m = "0" + m;
        }
        if (h < 10) {
          h = "0" + h;
        }
      }
      this.setData({
        d: d || 0, //天
        h: h, //天
        m: m, //天
        s: s, //天
        hm: hm, //天
      })
      return surplusTime;//剩余多少毫秒
    },
    countDownWithHm: function (time) {//以毫秒计时
      let countDownHmTask = setInterval(() => {
        let surplusTime = this.getSurplusTime(time);//获取计时剩余时间
        if (surplusTime <= 0) {//停止倒计时
          clearInterval(countDownHmTask);
          this.triggerEvent('countStop');
        }
      }, 100)

    },
    countDownWithSec: function (time) {//以秒计时
      let countDownWithSecTask = setInterval(() => {
        let surplusTime = this.getSurplusTime(time);//获取计时剩余时间
        if (surplusTime <= 0) {//停止倒计时
          clearInterval(countDownWithSecTask);
        }
      }, 1000)
    }

  }
})